package com.navicoa.e_libreria.utiles;

import com.navicoa.e_libreria.logica.usuario.Credencial;
import com.navicoa.e_libreria.logica.usuario.CredencialImpl;
import com.navicoa.e_libreria.presentacion.InicioAplicacion;
import com.vaadin.Application;
import com.vaadin.ui.AbsoluteLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.LoginForm.LoginEvent;
import com.vaadin.ui.Window;

public class ValidadorCredencialImpl implements ValidadorCredencial{

	LoginEvent event;
	Window error;
	Label lError2;
	Application application;
	Class<?> cDestino;
	
	public ValidadorCredencialImpl(Application a, LoginEvent e, Window er, Label lE, Class<?> clase){
		application = a;
		event = e;
		error = er;
		lError2 = lE;
		cDestino = clase;
	}
	
	private Application getApplication(){
		return application;
	}
	
	public void validar() {
		String userForm = event.getLoginParameter("username");
		String passForm = event.getLoginParameter("password");
		
		//Acceso directo de prueba
		if(userForm.equals("p") && passForm.equals("p")){
			userForm = "usuario1";
			passForm = "u1";
		}
		
		try{
			getApplication().setUser(new CredencialImpl(userForm));
			Credencial c = (Credencial) getApplication().getUser();

			if(c.getError()){
				//Error al no encontrar el nombre
				lError2.setValue("Usuario no encontrado");
				getApplication().getMainWindow().addWindow(error);
				error.center();
			}
			else{
				//Usuario existente
				
				if(c.validar(passForm)){
					//Usuario validado
					getApplication().setUser(c);					
					try {
						((InicioAplicacion) getApplication()).setMain((AbsoluteLayout) (cDestino.getConstructor(Application.class)).newInstance(getApplication()));
					} catch (InstantiationException e) {
						e.printStackTrace();
					} catch (IllegalAccessException e) {
						e.printStackTrace();
					}	
				}
				else{
					//Error en password
					lError2.setValue("Password Erronea");
					getApplication().getMainWindow().addWindow(error);
					error.center();						
				}
			}
		}
		catch(Exception e){
			lError2.setValue("Error en Conexion a la Base de datos");
			getApplication().getMainWindow().addWindow(error);
			error.center();	
			
			e.printStackTrace();
		}
	}

}
